// 定义一个接受一个对象的函数对象
function SZXVue(options){
    let self = this;
    this.data = options.data;
    this.methods = options.methods;
    Object.keys(this.data).forEach(function(key){
        self.proxykeys(key);
    });
    observer(this.data);
    new Compile(options.el, this);
    options.mounted.call(this);
}

// 给原型添加方法
// 代理的实现之一，js中还可以通过 Proxy类，如： const proxy = new Proxy(alice, handler);
SZXVue.prototype.proxykeys = function(key){
    let self = this;
    // 通过set和get钩子函数来实现代理功能
    Object.defineProperty(this, key, {
        enumerable: false,
        configurable: true,
        get: function getter(){
            return self.data[key];
        },
        set: function setter(newVal){
            self.data[key] = newVal;
        }
    })
}